package velha.game;

import javax.microedition.lcdui.Graphics;

public class Tabuleiro {

    public int x;
    public int y;
    public int width;
    public int height;
    public final int lugarWidth;
    public final int lugarHeight;
    //
    public final Lugar[] lugar = new Lugar[9];
    public final Tira[] tira = new Tira[8];

    public Tabuleiro(VelhaCanvas screen, int width, int height) {
        this.width = width;
        this.height = height;

        lugarWidth = width / 3;
        lugarHeight = height / 3;

        //Primeira linha
        lugar[0] = new Lugar(1, 1);
        lugar[1] = new Lugar(1, 2);
        lugar[2] = new Lugar(1, 3);

        //Segunda linha
        lugar[3] = new Lugar(2, 1);
        lugar[4] = new Lugar(2, 2);
        lugar[5] = new Lugar(2, 3);

        //Terceira linha
        lugar[6] = new Lugar(3, 1);
        lugar[7] = new Lugar(3, 2);
        lugar[8] = new Lugar(3, 3);

        //Horizontais
        tira[0] = new Tira(lugar[0], lugar[1], lugar[2]);
        tira[1] = new Tira(lugar[3], lugar[4], lugar[5]);
        tira[2] = new Tira(lugar[6], lugar[7], lugar[8]);

        //Verticais
        tira[3] = new Tira(lugar[0], lugar[3], lugar[6]);
        tira[4] = new Tira(lugar[1], lugar[4], lugar[7]);
        tira[5] = new Tira(lugar[2], lugar[5], lugar[8]);

        //Diagonais
        tira[6] = new Tira(lugar[0], lugar[4], lugar[8]);
        tira[7] = new Tira(lugar[2], lugar[4], lugar[6]);
    }

    public void reajustaLugares() {
        for (int i = 0; i < lugar.length; i++) {
            lugar[i].ajusta(this);
        }
    }

    public void draw(Graphics g) {
        int corTabuleiro = 0x000000;

        g.setColor(corTabuleiro);

        //Primeira linha horizontal
        g.drawLine(x, y + lugarHeight, x + width, y + lugarHeight);
        //Segunda linha horizontal
        g.drawLine(x, y + (lugarHeight * 2), x + width, y + (lugarHeight * 2));

        //Primeira linha vertical
        g.drawLine(x + lugarWidth, y, x + lugarWidth, y + height);
        //Segunda linha vertical
        g.drawLine(x + (lugarWidth * 2), y, x + (lugarWidth * 2), y + height);

        for (int i = 0; i < lugar.length; i++) {
            lugar[i].draw(g);
        }
    }

    public void reseta() {
        for (int i = 0; i < lugar.length; i++) {
            lugar[i].marca = Constantes.SEM_MARCA;
        }
    }

    public boolean isCheio() {
        for (int i = 0; i < lugar.length; i++) {
            if (lugar[i].marca == Constantes.SEM_MARCA) {
                return false;
            }
        }
        return true;
    }

    //Retorna o lugar no tabuleiro [0 a 8] da cordenada
    public static int getIndice(int linha, int coluna) {
        return (((linha - 1) * 3) + coluna) - 1;
    }
}
